<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // 数组的深拷贝改写版
        // function deepCopy(arr) {
        //     const arr2 = [];

        //     for (let key in arr) {   // key 表示下标
        //         if (typeof arr[key] === 'object') {
        //             arr2[key] = deepCopy(arr[key]);
        //         }
        //         else {
        //             // arr2.push(arr[key])
        //             arr2[key] = arr[key];
        //         }
        //     }

        //     return arr2
        // }



        // 数组对象的深拷贝
        function deepCopy(data) {

            if (typeof data !== 'object') {
                return
            }

            // let res;
            // 首先判断data是数组还是对象
            // if (Array.isArray(data)) {
            //     res = [];
            // }
            // else {
            //     res = {};
            // }

            let res = Array.isArray(data) ? [] : {};

            // 遍历实现深拷贝
            for (let key in data) {
                // 判断data[key]是不是引用数据类型
                // if (typeof data[key] === 'object') {
                //     res[key] = deepCopy(data[key]);
                // }
                // else {
                //     res[key] = data[key];
                // }
                res[key] = typeof data[key] === 'object' ? deepCopy(data[key]) : data[key];
            }

            return res;

        }






        const arr = [1, { a: 1 }, [3], [4, 5]];
        const arr2 = deepCopy(arr);
        arr[1].b = 6;

        console.log(arr);
        console.log(arr2);


        const obj = { a: 1, b: [1, 2, 3] };
        const obj2 = deepCopy(obj);
        obj.b.push(4);
        console.log(obj);
        console.log(obj2);

    </script>

</body>

</html>